import Vue from 'vue';
import store from '../../../store';
import { Notification, MessageBox,Message } from "element-ui";
import i18n from '../../../lang'

import {cachestroeSet, cachestroeGet} from '@/api/login.js';
/**
 * @var {Object} G
 * @desc G代表global，系统公共方法
 */
Vue.prototype.G = {
	/**
	 * @description 监控 全局点击事件
	 * @param function: 回调函数
	 * @return not
	 * @author hanxu 2022-07-01 17:08:36
	 **/
	globalClick: function (callback) {
		document.getElementById('the_body').onclick = (e) => {
			callback(e);
		};
	},
	/**
	 * @description 数组去重
	 * @param Array: {array} 要操作的数组
	* @param String: {key} 根据制定的值
	 * @return Array 返回去重后的数组
	 * @author zhangqaing 2022-02-09 10:08:36
	 **/
	uniqueArray: function (array, key) {
		var result = [array[0]];
		for (var i = 1; i < array.length; i++) {
			var item = array[i];
			var repeat = false;
			for (var j = 0; j < result.length; j++) {
				if (item[key] == result[j][key]) {
					repeat = true;
					break;
				}
			}
			if (!repeat) {
				result.push(item);
			}
		}
		return result;
	},
	/**
	 * @description 导出文件
	 * @param String:{fileType} fileType为MIME 类型（参考网址：https://blog.csdn.net/u013089311/article/details/53695212）
	 * @param String:{res} 后台返回数据，为一个Bolb
	 * @param String:{fileName} 下载文件名
	 * @return not
	 * @author zhangqaing 2022-02-09 10:42:34
	 **/
	exportFile: function (res, fileName, fileLx = '.xlsx', fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8') {

		function getOperatingSystemInfo() {
			let operatingInfo = navigator.userAgent;
			let isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows");
			let isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC") || (navigator.platform == "Macintosh") || (navigator.platform == "MacIntel");
			if (isMac) return "Mac";
			let isUnix = (navigator.platform == "X11") && !isWin && !isMac;
			if (isUnix) return "Unix";
			let isLinux = (String(navigator.platform).indexOf("Linux") > -1);
			if (isLinux) return "Linux";
			if (isWin) {
				let isWin2K = operatingInfo.indexOf("Windows NT 5.0") > -1 || operatingInfo.indexOf("Windows 2000") > -1;
				if (isWin2K) return "Win2000";
				let isWinXP = operatingInfo.indexOf("Windows NT 5.1") > -1 || operatingInfo.indexOf("Windows XP") > -1;
				if (isWinXP) return "WinXP";
				let isWin2003 = operatingInfo.indexOf("Windows NT 5.2") > -1 || operatingInfo.indexOf("Windows 2003") > -1;
				if (isWin2003) return "Win2003";
				let isWinVista = operatingInfo.indexOf("Windows NT 6.0") > -1 || operatingInfo.indexOf("Windows Vista") > -1;
				if (isWinVista) return "WinVista";
				let isWin7 = operatingInfo.indexOf("Windows NT 6.1") > -1 || operatingInfo.indexOf("Windows 7") > -1;
				if (isWin7) return "Win7";
				let isWin10 = operatingInfo.indexOf("Windows NT 10")!=-1;
				if(isWin10) return "Win10"
			}else{
				return false
			}
		}
		let operatingSystemInfo = getOperatingSystemInfo();
		console.log('您的操作系统是' + operatingSystemInfo);

		const win7Type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"
		const win10Type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"
		const blob = new Blob([res], {
			// type: operatingSystemInfo=="Win7"?win7Type:win10Type,
			type: fileType
		});
		const downloadElement = document.createElement('a');
		const href = window.URL.createObjectURL(blob);
		downloadElement.href = href;
		downloadElement.id = "excelDown";
		// 导出的文件名后面不用加xlsx后缀名，加了后，在win7上，导出时，会出现2个后缀的问题

		if(operatingSystemInfo=="Win7"){
			downloadElement.download = fileName
		}else{
			downloadElement.download = fileName + `${fileLx}`
		}

		document.body.appendChild(downloadElement);
		downloadElement.click();
		document.body.removeChild(downloadElement); // 下载完成移除元素
		window.URL.revokeObjectURL(href); // 释放掉blob对象
	},
	/**
	 @description echarts图表导出下载全局设置
	 @param String: {x} 图表距离X轴的位置
	 @param String: {name} 导出的图片名
	 @return not
	 @author zhangqaing 2022-02-09 10:47:50
	*/
	echartsExport: function (x, name) {
		return {
			x: x ? x : '95%', //距离x轴距离
			feature: {
				saveAsImage: {
					name: name, //导出的图片名称
					backgroundColor: '#060f20',
					title: '导出',
					// icon: `image://${iconUrl}`, // 内部相对路径
				},
			},
		};
	},
	/**
	 * @description echarts清除
	 * @param not
	 * @return not
	 * @author zhangqaing 2022-02-09 10:49:46
	 **/
	clearEcharts: function (arr) {
		if (Array.isArray(arr) && arr.length > 0)
			arr.forEach((item) => {
				// item不可为null，空对象等
				if (item && Object.keys(item).length > 0) {
					item.clear();
					item.dispose();
					item = null;
				}
			});
	},
	/**
	 * @description 全局loading
	 * @param not
	 * @return not
	 * @author zhangqaing 2022-02-09 10:50:08
	 **/
	globalLoading: function (loadingObj = {}, dom = '.glotableTable-box  .el-table__body-wrapper') {
		return Vue.prototype.$loading({
			target: loadingObj.target || dom,
			lock: true,
			text: loadingObj.text || i18n.t('Loading'),
			customClass: 'loading-card-box',
			spinner: 'el-icon-loading',
			// spinner:"loading-webm",
			// background: index==1 ? "#F4F4F8" : "#224679",
		});
	},

	/**
	 * @description form表单中的查询条件过多时点击展开收起事件
	 * @param not
	 * @return not
	 * @author huli
	 **/
	$showMoreClick: function (event) {
		let parentBox = $(event.target).parents('.wrapperform-box');
		if (event.target.innerHTML == '展开') {
			event.target.innerHTML = '收起';
			parentBox.find('.mryc-form').each((index, item) => {
				$(item).addClass('active');
			});
		} else {
			event.target.innerHTML = '展开';
			parentBox.find('.mryc-form').each((index, item) => {
				$(item).removeClass('active');
			});
		}
	},
	/**
	 * @description 重新设置下拉选择框options
	 * @param {optionsArr}: Array 原数据
	 * @param {labelObj}: Object 需要改变的值
	 * @return 新数组
	 * @author hanzheng 2022-07-08 18:24:45
	 **/
	resetOptions: function (optionsArr, labelObj) {
		let curArr = [];
		optionsArr.forEach((item, index) => {
			let curItem = {
				label: item[labelObj.label],
				value: item[labelObj.value],
			};
			curArr.push(curItem);
		});
		return curArr;
	},

};

/**
 * @var {Object} W
 * @desc W代表window，弹窗相关方法
 */
Vue.prototype.W = {
	/**
	 * @description 公共提示方法封装，type为success和warning两种模式
	 * @param String: {type} 传入类型，判断是成功提示还是错误提示
	 * @param String: {msg} 提示消息
	 * @return not
	 * @author zhangqaing 2022-02-09 09:57:14
	 **/
	$tips: function (type, msg) {
		Notification.closeAll()
		Notification({
			// title: false,
			duration:3*1000,
			type: type,
			message: msg,
			showClose:true,
			customClass:'customNotifyClass'
		});
	},
	/**
	 * @description 封装二次确认弹窗
	 * @param  String: {type}  确认框类型
	 * @param  String: {msg}  确认框内提示文字
	 * @param  String: {title}  确认框标题文字
	 * @return Promise 返回一个Promise对象
	 * @author hanzheng 2022-02-08 16:37:45
	 **/
	$myConfirm: function (type, msg, title) {
		return new Promise((resolve, reject) => {
			MessageBox.confirm(
				msg ? msg : "",
				title ? title : "",
				{
					center: true,
					type: type ? type : "warning",
					// dangerouslyUseHTMLString: true,
					confirmButtonText: i18n.t('OK'),
					cancelButtonText: i18n.t('Cancel'),
					lockScroll:false,
					closeOnClickModal:false,
					dangerouslyUseHTMLString:true,
					appendToBody:true,
					modalAppendToBody:true,
				}
			)
				.then(() => {
					resolve();
				})
				.catch((action) => {
					reject();
				});
		});
	},
	$mywebSocketMessage: function (msg) {
		console.log(260, msg);
		var messageTypeList={
			"message-hint":{
				type:'info',
				desc:'普通'
			},
			"message-warning":{
				type:'warning',
				desc:'警告'
			},
			"message-error":{
				type:'error',
				desc:'错误'
			},
			"message-success":{
				type:'success',
				desc:'成功'
			}
		}
		Message(
			{
				message:msg ? msg : "",
				type: "info",
				dangerouslyUseHTMLString:false,
				showClose:true,
				// duration:0
			}
		)
	},
};
// 20200909101010转为2020-09-09 10:10:10
Vue.prototype.formateDay = function (row, b, c) {
	if (arguments.length == 1) {
		c = arguments[0]
	}
	if (!c || c.indexOf("-") > 0) {
		return c;
	}
	if (c.length == 4) {
		var pattern = /(\d{4})/;
		return c.replace(pattern, '$1');
	}
	if (c.length == 6) {
		var pattern = /(\d{4})(\d{2})/;
		return c.replace(pattern, '$1-$2');
	}
	if (c.length == 8) {
		var pattern = /(\d{4})(\d{2})(\d{2})/;
		return c.replace(pattern, '$1-$2-$3');
	}
	if (c.length == 14) {
		var pattern = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/;
		return c.replace(pattern, '$1-$2-$3 $4:$5:$6');
	}

};
/**
 * 各种日期格式转换推荐使用moment
 * @description 把时间戳处理成想要的格式，例如 yyyyMMdd 、yyyy-MM-dd 、yyyyMMddhhmmss等，挂载在Date的原型上在，直接new Date的时候就能用了
 * 用法例如new Date().Format("yyyy-MM-dd")
 * @param String:{formatStr} 传入时间
 * @return String{str} --处理完成的时间
 * @author hanzheng 2022-02-09 09:42:49
 **/
Date.prototype.Format = function (formatStr) {
	var str = formatStr;
	var Week = ['日', '一', '二', '三', '四', '五', '六'];
	var month = this.getMonth() + 1;
	str = str.replace(/yyyy|YYYY/, this.getFullYear());
	str = str.replace(
		/yy|YY/,
		this.getYear() % 100 > 9
			? (this.getYear() % 100).toString()
			: '0' + (this.getYear() % 100)
	);
	str = str.replace(/MM/, month > 9 ? month.toString() : '0' + month);
	str = str.replace(/M/g, this.getMonth());
	str = str.replace(/w|W/g, Week[this.getDay()]);
	str = str.replace(
		/dd|DD/,
		this.getDate() > 9 ? this.getDate().toString() : '0' + this.getDate()
	);
	str = str.replace(/d|D/g, this.getDate());
	str = str.replace(
		/hh|HH/,
		this.getHours() > 9 ? this.getHours().toString() : '0' + this.getHours()
	);
	str = str.replace(/h|H/g, this.getHours());
	str = str.replace(
		/mm/,
		this.getMinutes() > 9
			? this.getMinutes().toString()
			: '0' + this.getMinutes()
	);
	str = str.replace(/m/g, this.getMinutes());
	str = str.replace(
		/ss|SS/,
		this.getSeconds() > 9
			? this.getSeconds().toString()
			: '0' + this.getSeconds()
	);
	str = str.replace(/s|S/g, this.getSeconds());
	return str;
};
/**
 * @description
 * @param 修改全局颜色的方法
 * @return Number|String: {themeCode} 当前皮肤状态码
 * @author zhangqaing 2022-02-09 10:50:26
 **/
export function changeColor(themeCode) {
	// 主题颜色变量代码
	let themeColorCode = [
		['--header-bg', '#ffffff', '#304867'],    //  顶部header栏背景色
		['--header-color', '#262B32', '#7996B4'],    //  顶部header栏右侧图标字体颜色
		['--headerHover-color', '#3765D7', '#ffffff'],           //  表格空数据背景色
		['--text-color', '#262B32', '#E4EBF2'],        //  文字基础颜色(如：顶部title)
		['--primaryBtn-bg', '#3765D7', '#00C160'],          //   状态为primary按钮的背景色
		['--primaryBtn-bg-light', '#3765D750', '#00C16050'],          //   状态为primary按钮的背景色
		['--main-bg', '#f7f8fb', '#19355a'],  //   下方主背景颜色
		['--leftMenu-bg', '#3765D7', '#304867'],   //  左侧菜单背景色
		['--leftMenu-color', 'rgba(255, 255, 255, 0.5)', '#7996B4'],   //  左侧菜单文字颜色
		['--routerTag-bg', '#FFFFFF', '#2A5189'],      //  路由标签背景色
		['--routerTagSelect-bg', '#3765D7', '#455F87'],     //  选中路由标签背景色
		['--routerTagDiv-bg', '#EBEEF3', '#1F406E'],   //  路由tab栏背景色
		['--routerTag-color', '#727B8F', '#7996B4'],      //   路由标签文字颜色
		['--form-bg', '#ffffff', '#1F406E'],         //   form表单背景
		['--dialogClose-color', '#AFB2BD', '#7996B4'],  //  弹窗关闭按钮颜色
		['--defaultBtnHover-bg', 'rgba(236,239,250,0.5)', 'rgba(68,95,135,0.5)'],  // 默认按钮hover背景色
		['--primaryBtnHover-bg', '#9BB2EB', 'rgba(0,193,96,0.5)'],     //  状态为primary鼠标移入背景色
		['--disabledBtn-color', '#727B8F', '#19355A'],  //  禁用按钮字体颜色
		['--input-bg', '#F4F4F8', '#ABBCD0'],  // input输入框背景
		['--input-color', '#262B32', '#19355A'],   // input输入框字体颜色
		['--inputFocusBorder-color', '#3765D7', '#E4EBF2'],           // input和select编辑状态
		['--inputPlaceholder-color', '#B0B2BC', '#445F87'],      // input placeholder
		['--tableRow-bg', '#F4F4F8', '#224679'], // 表身每一行背景
		['--tableRowHover-bg', '#E9ECF6', '#2A5189'],          // 表身鼠标移入
		['--inputDisabled-bg', '#DCDFE5', '#445F87'],  //  input，select表单元素禁用背景色
		['--scroll-bg', '#859DE6', '#4A5E84'],   //   滚动条颜色
		['--pagingJump-bg', '#ECEFFA', '#445F87'],   // 分页左右跳转按钮背景色
		['--pagingJump-color', '#3765D7', '#E4EBF2'],       // 分页左右跳转字体颜色
		['--checkboxBorder-color', '#DCDFE5', '#7996B4'],   // checkbox border颜色
		['--dropMenu-bg', '#262B32', '#2A5189'],     // 悬浮菜单背景色
		['--dropMenuHover-color', '#3765D7', '#19355A'], // 悬浮菜单hover字体颜色
		['--dropMenuHover-bg', '#F6F7FF', '#9FB1C9'], // 悬浮菜单hover背景颜色
		['--timePickerIcon-color', '#262B32', '#445F87'],   // 日期选择器操作图标颜色
		['--timePicker-bg', '#FFFFFF', '#ABBCD0'],     // 下拉框背景色
		['--selectHover-bg', '#F6F7FF', '#9BB2CB'],       // 下拉框鼠标 hover 背景色
		['--switch-bg', '#AFB2BD', '#455f87'],  //  $--color-switchBg
		['--switchMenuIcon-bg', '#F7F8FB', '#1F406E'],  // 下拉框默认字体色
		['--tips-bg', '#ffffff', '#445F87'],  // 轻提示弹窗的背景色
		['--selectTime-bg', '#E4E9F9', '#9FB1C9'],  // 日期选中圆圈颜色
		['--timeInput-bg', '#FFFFFF', '#E4EBF2'],  // time 输入框背景色
		['--timePickerBorder-color', '#DCDFE5', '#e4ebf2'],  //  时间选择器input边框颜色
		['--dropTreeInput-bg', '#F4F4F8', '#E4EBF2'],    //  下拉树选择input背景色
        ['--warning-color', '#00B89BFF', '#74BCF9FF'],     //  重点国家
		['--danger-color', '#ED7349FF', '#F3B240FF'],     //  违法违规
		['--violation-color', '#FF4200FF', '#FF4200FF'],     //  违法违规
		['--imgList-bg', '#f4f4f8', '#224679'], //  图片list背景色
		['--black-white', '#262B32', '#E5EBF2'],        //  文字基础颜色(如：顶部title)
		['--gray-blackBlue3', '#AFB2BD', '#7996B4'],  //  弹窗关闭按钮颜色
	];
	// 修改颜色变量对象
	let colorsetProperty = document.getElementsByTagName('body')[0];
	// 主题代码
	themeCode = Number(themeCode);
	themeColorCode.forEach((item, index) => {
		colorsetProperty.style.setProperty(item[0], item[themeCode]);
	});
}

// 文本输入框的特殊字符禁止输入
Vue.prototype.validSpecialZf = function (valInput) {
	valInput = valInput
	  .replace(
		/[`~!@#$%^&*()_\-+=<>?:"{}|,/;'\\[\]~！@#￥%……&*（）——\-+={}|《》？：“”【】；‘’，、]/g,
		''
	  )
	  .replace(/\s/g, '');
	return valInput;
};



/**
 * @description: 正则去除 ':' 和 '-' 以及 空格
 * @param Object: {}
 * @return
 * @date: xujingyue 2022-08-11 08:58:43
**/
Vue.prototype.regSpot = new RegExp(":", "g");
Vue.prototype.regShort = new RegExp("-", "g");
Vue.prototype.regSpace = new RegExp(" ", "g");

/**
* @description socket 进行握手定义
* @param callbackframe: {Function 回调函数}
* @author hanzheng 2022-08-12 11:47:39
**/
import SockJS from "sockjs-client";
import Stomp from "stompjs";
let socketTimer = null;
Vue.prototype.initWebScoket = function (callbackframe) {
	var socket = new SockJS(`${xxtzWebsocketUrl}`, null, { timeout: 30000 });
	// 获取STOMP子协议的客户端对象
	Vue.prototype.stompClient = Stomp.over(socket);
	Vue.prototype.stompClient.debug = null;
	Vue.prototype.stompClient.heartbeat.outgoing = 30000;  // 客户端每30000ms发送一次心跳检测
	Vue.prototype.stompClient.heartbeat.incoming = 0; //客户端不从服务端接收心跳包
	Vue.prototype.stompClient.connect({}, callbackframe, () => {
		if (socketTimer) {
			clearInterval(socketTimer)
		}
		// 30s后重新连接一次
		socketTimer = setTimeout(() => {
			Vue.prototype.initWebScoket(callbackframe);
		}, 30 * 1000);
	});
};
/**
* @description 在页面刷新时将vuex里的信息保存到sessionStorage里
* @param not
* @return not
* @author xiongyi 2022-08-19
**/
export function setStoreSession() {
	let token = localStorage.getItem("token");
	if (sessionStorage.getItem(token + 'sjbbStore')) {
		store.replaceState(
			Object.assign(
				{},
				store.state,
				JSON.parse(sessionStorage.getItem(token + 'sjbbStore'))
			)
		);
	}
	window.addEventListener('beforeunload', () => {
		// sessionStorage.clear();
		sessionStorage.setItem(
			token + 'sjbbStore',
			JSON.stringify(store.state)
		);
	});
}
/**
* @description 在页面退出或异常时清除Session中的数据及vuex store中的数据
* @param not
* @return not
* @author xiongyi 2022-08-19
**/
export function clearStoreSession() {
	// localStorage.clear();
	// sessionStorage.clear();
	store.commit("setTagsList", [])//清空顶部菜单栏
	store.commit("setUserInfo", "")//清空基本信息
}

/**
 * @description 生成唯一标识（ID）
 * @param not
 * @return not
 * @author qiankui 2023-9-13 14:46:13
 **/
export function getGuid() {
	// 引用自https://blog.csdn.net/qweeryyioop/article/details/121494785
	let abc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
	let [max, min] = [Math.floor(Math.random() * (10 - 7 + 1) + 1), Math.floor(Math.random() * (17 - 10 + 1) + 17)];
	abc = abc.sort(() => 0.4 - Math.random()).slice(max, min).slice(0, 8).join("");
	return new Date().getTime() + abc;
}

/**
 * @description 清除localStorage内的用户信息
 * @param not
 * @return not
 * @author qiankui 2023-4-28 14:19:20
 **/
export function removeLocalUserInfo() {
	localStorage.removeItem("userInfo")
}

/**
 * @description 获取localStorage内的用户信息
 * @param not
 * @return not
 * @author qiankui 2023-4-28 14:17:12
 **/
export function getLocalUserInfo() {
	var userInfo=localStorage.getItem("userInfo")
	if(userInfo){
		return JSON.parse(userInfo)
	}else{
		return false
	}
}

// 获取浏览器缓存文件内设置的语言
export function getSessionStorageLanguage() {

	var language=sessionStorage.getItem('language')||'zh-CN'
	i18n.locale=language
	return language;
}

// 设置浏览器缓存文件内设置的语言
export function setSessionStorageLanguage(lang) {
	i18n.locale=lang
	console.log('i18n的语言',i18n.locale);
	sessionStorage.setItem('language',lang)
}
// 获取当月日期，返回当前月份的年、月、日、最大天数
export function getMonthDate(timeString){
	// timeString必须是date类型的字符串，例如：'Mon Mar 11 2024 11:09:19 GMT+0800 (中国标准时间)'
	var params={
		prefix:'00:00:00',
		suffix:'23:59:59'
	}
	var date=null
	if (timeString){
		date=timeString
	}else{
		date=new Date()
	}

	// 年
	params.year=date.getFullYear()
	// 月
	params.month=date.getMonth()+1
	params.month_MM=params.month<10?'0'+params.month:params.month
	// 日
	params.date=date.getDate()
	params.date_DD=params.date<10?'0'+params.date:params.date
	// 周
	params.day=date.getDay()
	// 当前月的最大天数
	params.maxDays=new Date(params.year,params.month, 0).getDate()

	// 当天的完整年月日
	params.originalDateTime=params.year+'-'+params.month+'-'+params.date

	// 原始的时间字符串
	params.originaString=timeString||date

	params.startDate=params.year+'-'+params.month_MM+'-'+'01'
	params.endDate=params.year+'-'+params.month_MM+'-'+params.maxDays

	params.startTime=params.prefix
	params.endTime=params.suffix

	params.startDateTime=params.startDate+' '+params.startTime
	params.endDateTime=params.endDate+' '+params.endTime
	// 完整的开始时间
	// params.startTime=+' '+params.prefix
	// 完整的结束时间
	// params.endTime=params.year+'-'+(params.month<10?'0'+params.month:params.month)+'-'+params.maxDays+' '+params.suffix
	return params
}

Vue.prototype.isElectron = window.navigator.userAgent.indexOf("Electron")!=-1?true:false;
Vue.prototype.elLoadingConfig = {
	background:"rgba(255, 255, 255, 0.8)"
};
// 检测输入框的值是否为空
export function checkIsEmpty(value) {
	if (value === '' || value === null || value === undefined) {
		return false
	} else {
		return true
	}
}
